﻿/**
* ...
* @author Kinglong
* @version 0.1
*/
package org.asclub.ui
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	
	public class IconDataManager 
	{
		public static const MAXIMIZE:String = "maximize";
		public static const MINIMIZE:String = "minimize";
		public static const DEOXIDIZE:String = "deoxidize";
		public static const CLOSE:String = "close";
		public static const RESIZE:String = "resize";
		public static const PREV:String = "prev";
		public static const NEXT:String = "next";
		public static const FIRST:String = "first";
		public static const END:String = "end";
		public static const MINIARROW:String= "miniArrow";
		public static const ARROW:String= "arrow";
		public static const CURSOR_STOP:String = "cursor_stop";
		public static const CURSOR_WHITE_ARROW:String = "cursor_white_arrow";
		public static const CURSOR_BLACK_ARROW:String = "cursor_black_arrow";
		public static const CURSOR_CUT:String = "cursor_cut";
		public static const CURSOR_PEN:String = "cursor_pen";
		public static const CURSOR_PAINT:String = "cursor_paint";
		public static const CURSOR_SCALE_SMALL:String = "cursor_scale_small";
		public static const CURSOR_SCALE_BIG:String = "cursor_scale_big";
		public static const CURSOR_HAND:String = "cursor_hand";
		public static const CURSOR_HAND_DOWN:String = "cursor_hand_down";
		public static const CURSOR_BOX_MOVE:String = "cursor_box_move";
		public static const CURSOR_CONTROL_MOVE:String = "cursor_control_move";
		public static const CURSOR_CONTROL_POSITIVE:String = "cursor_control_positive";
		public static const CURSOR_CONTROL_OBLIQUE:String = "cursor_control_oblique";
		public function IconDataManager()
		{
			
		}
		
		/**
		 * 通过图标名称获取相关位图
		 * @param	name  图标名称
		 * @return  Bitmap
		 */
		public static function getIcon(name:String):Bitmap
		{
			var data:Array;
			switch(name)
			{
				case MAXIMIZE:
					data = [
					4,9,9,0x0,
					1,1,1,1,1,1,1,1,1,
					1,1,1,1,1,1,1,1,1,
					1,0,0,0,0,0,0,0,1,
					1,0,0,0,0,0,0,0,1,
					1,0,0,0,0,0,0,0,1,
					1,0,0,0,0,0,0,0,1,
					1,0,0,0,0,0,0,0,1,
					1,0,0,0,0,0,0,0,1,
					1,1,1,1,1,1,1,1,1
					];
				break;
				case MINIMIZE:
					data = [
					4,6,2,0x0,
					1,1,1,1,1,1,
					1,1,1,1,1,1
					];
				break;
				case DEOXIDIZE:
					data = [
					4,8,9,0x0,
					0,0,1,1,1,1,1,1,
					0,0,1,1,1,1,1,1,
					0,0,1,0,0,0,0,1,
					1,1,1,1,1,1,0,1,
					1,1,1,1,1,1,0,1,
					1,0,0,0,0,1,1,1,
					1,0,0,0,0,1,0,0,
					1,0,0,0,0,1,0,0,
					1,1,1,1,1,1,0,0
					];
				break;
				case RESIZE:
					data = [
					5,12,12,0xFFFFFF,0x808080,
					0,0,0,0,0,0,0,0,0,0,0,1,
					0,0,0,0,0,0,0,0,0,0,1,2,
					0,0,0,0,0,0,0,0,0,1,2,2,
					0,0,0,0,0,0,0,0,1,2,2,0,
					0,0,0,0,0,0,0,1,2,2,0,1,
					0,0,0,0,0,0,1,2,2,0,1,2,
					0,0,0,0,0,1,2,2,0,1,2,2,
					0,0,0,0,1,2,2,0,1,2,2,0,
					0,0,0,1,2,2,0,1,2,2,0,1,
					0,0,1,2,2,0,1,2,2,0,1,2,
					0,1,2,2,0,1,2,2,0,1,2,2,
					1,2,2,0,1,2,2,0,1,2,2,0
					];
				break;
				case PREV:
					data = [
					4,8,8,0x0,
					0,0,0,1,0,0,0,1,
					0,0,1,1,0,0,1,1,
					0,1,1,0,0,1,1,0,
					1,1,0,0,1,1,0,0,
					1,1,0,0,1,1,0,0,
					0,1,1,0,0,1,1,0,
					0,0,1,1,0,0,1,1,
					0,0,0,1,0,0,0,1
					];
				break;
				case NEXT:
					data = [
					4,8,8,0x0,
					1,0,0,0,1,0,0,0,
					1,1,0,0,1,1,0,0,
					0,1,1,0,0,1,1,0,
					0,0,1,1,0,0,1,1,
					0,0,1,1,0,0,1,1,
					0,1,1,0,0,1,1,0,
					1,1,0,0,1,1,0,0,
					1,0,0,0,1,0,0,0
					];
				break;
				case FIRST:
					data = [
					4,5,8,0x0,
					1,0,0,0,1,
					1,0,0,1,1,
					1,0,1,1,0,
					1,1,1,0,0,
					1,1,1,0,0,
					1,0,1,1,0,
					1,0,0,1,1,
					1,0,0,0,1
					];
				break;
				case END:
					data = [
					4,5,8,0x0,
					1,0,0,0,1,
					1,1,0,0,1,
					0,1,1,0,1,
					0,0,1,1,1,
					0,0,1,1,1,
					0,1,1,0,1,
					1,1,0,0,1,
					1,0,0,0,1
					];
				break;
				case MINIARROW:
					data = [
					4,5,3,0x0,
					1,1,1,1,1,
					0,1,1,1,0,
					0,0,1,0,0
					];
				break;
				case ARROW:
					data = [
					4,7,4,0x0,
					1,1,1,1,1,1,1,
					0,1,1,1,1,1,0,
					0,0,1,1,1,0,0,
					0,0,0,1,0,0,0
					];
				break;
				case CURSOR_STOP:
					data = [
					5,14,14,0x0,0xFFFFFF,
					0,0,0,0,1,1,1,1,1,1,0,0,0,0,
					0,0,1,1,1,1,1,1,1,1,1,1,0,0,
					0,1,1,1,1,2,2,2,2,1,1,1,1,0,
					0,1,1,2,2,2,2,2,2,1,1,1,1,0,
					1,1,1,2,2,2,2,2,1,1,1,1,1,1,
					1,1,2,2,2,2,2,1,1,1,2,2,1,1,
					1,1,2,2,2,2,1,1,1,2,2,2,1,1,
					1,1,2,2,2,1,1,1,2,2,2,2,1,1,
					1,1,2,2,1,1,1,2,2,2,2,2,1,1,
					1,1,1,1,1,1,2,2,2,2,2,1,1,1,
					0,1,1,1,1,2,2,2,2,2,2,1,1,0,
					0,1,1,1,1,2,2,2,2,1,1,1,1,0,
					0,0,1,1,1,1,1,1,1,1,1,1,0,0,
					0,0,0,0,1,1,1,1,1,1,0,0,0,0
					];
				break;
				case CURSOR_BLACK_ARROW:
					data = [
					5,10,16,0xFFFFFF,0x0,
					1,1,0,0,0,0,0,0,0,0,
					1,2,1,0,0,0,0,0,0,0,
					1,2,2,1,0,0,0,0,0,0,
					1,2,2,2,1,0,0,0,0,0,
					1,2,2,2,2,1,0,0,0,0,
					1,2,2,2,2,2,1,0,0,0,
					1,2,2,2,2,2,2,1,0,0,
					1,2,2,2,2,2,2,2,1,0,
					1,2,2,2,2,2,2,2,2,1,
					1,2,2,2,2,2,1,1,1,1,
					1,2,2,1,2,2,1,0,0,0,
					1,2,1,0,1,2,2,1,0,0,
					1,1,0,0,1,2,2,1,0,0,
					0,0,0,0,0,1,2,2,1,0,
					0,0,0,0,0,1,2,2,1,0,
					0,0,0,0,0,0,1,1,0,0
					];
				break;
				case CURSOR_WHITE_ARROW:
					data = [
					5,10,16,0xFFFFFF,0x0,
					1,1,0,0,0,0,0,0,0,0,
					1,2,1,0,0,0,0,0,0,0,
					1,2,2,1,0,0,0,0,0,0,
					1,2,1,2,1,0,0,0,0,0,
					1,2,1,1,2,1,0,0,0,0,
					1,2,1,1,1,2,1,0,0,0,
					1,2,1,1,1,1,2,1,0,0,
					1,2,1,1,1,1,1,2,1,0,
					1,2,1,1,1,2,2,2,2,1,
					1,2,1,2,2,2,1,1,1,1,
					1,2,2,1,2,2,1,0,0,0,
					1,2,1,0,1,2,2,1,0,0,
					1,1,0,0,1,2,2,1,0,0,
					0,0,0,0,0,1,2,2,1,0,
					0,0,0,0,0,1,2,2,1,0,
					0,0,0,0,0,0,1,1,0,0
					];
				break;
				case CURSOR_CUT:
					data = [
					6,16,16,0x000000,0xFFFFFF,0x373737,
					1,2,0,0,0,0,0,0,0,0,2,1,2,0,0,0,
					2,1,2,0,0,0,0,0,0,0,2,1,2,0,0,0,
					0,2,1,2,2,2,2,2,2,2,2,1,2,2,2,2,
					0,0,2,1,1,1,1,1,1,1,2,1,1,1,1,1,
					0,0,2,1,1,1,1,1,1,1,2,1,1,1,1,1,
					0,0,2,1,1,3,2,2,2,2,2,1,1,2,2,2,
					0,0,2,1,1,2,3,0,0,2,2,1,1,2,0,0,
					0,0,2,1,1,2,0,3,0,2,2,1,1,2,0,0,
					0,0,2,1,1,2,0,0,3,2,2,1,1,2,0,0,
					0,0,2,1,1,2,2,2,2,3,2,1,1,2,0,0,
					2,2,2,2,2,2,2,2,2,2,2,1,1,2,0,0,
					1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,
					2,2,2,1,1,1,1,1,1,1,1,1,1,2,0,0,
					0,0,2,1,1,2,2,2,2,2,2,2,2,2,0,0,
					0,0,2,1,1,2,0,0,0,0,0,0,0,0,0,0,
					0,0,2,1,1,2,0,0,0,0,0,0,0,0,0,0
					];
				break;
				case CURSOR_PEN:
					data = [
					5,16,16,0x000000,0xFFFFFF,
					0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,0,
					0,0,0,0,0,0,0,0,0,0,0,2,1,1,1,2,
					0,0,0,0,0,0,0,0,0,0,2,1,1,1,1,1,
					0,0,0,0,0,0,0,0,2,2,1,1,1,1,1,1,
					0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,1,
					0,0,0,0,0,0,0,2,1,1,1,1,1,1,1,0,
					0,0,0,0,0,0,0,2,1,1,1,1,1,1,0,0,
					0,0,0,0,0,0,2,1,2,1,1,1,1,0,0,0,
					0,0,0,0,0,2,1,2,2,2,1,1,1,0,0,0,
					0,0,0,0,2,1,2,2,2,1,0,0,0,0,0,0,
					0,0,0,2,1,2,2,2,1,0,0,0,0,0,0,0,
					0,0,2,1,2,2,2,1,0,0,0,0,0,0,0,0,
					0,2,1,2,2,2,1,0,0,0,0,0,0,0,0,0,
					0,2,1,2,2,1,0,0,0,0,0,0,0,0,0,0,
					2,1,2,1,1,0,0,0,0,0,0,0,0,0,0,0,
					2,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0
					];
				break;
				case CURSOR_PAINT:
					data = [
					5,16,16,0x000000,0xFFFFFF,
					0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,
					0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,
					0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,
					0,0,0,0,0,1,2,2,1,2,1,0,0,0,0,0,
					0,0,0,0,1,2,2,2,1,2,2,1,1,1,0,0,
					0,0,0,1,2,2,2,2,1,2,2,2,1,1,1,0,
					0,0,1,2,2,2,2,1,2,1,2,2,2,1,1,1,
					0,1,2,2,2,2,2,2,1,2,2,2,2,1,1,1,
					1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,
					1,2,2,2,2,2,2,2,2,2,2,1,0,1,1,1,
					0,1,2,2,2,2,2,2,2,2,1,0,0,1,1,1,
					0,0,1,2,2,2,2,2,2,1,0,0,0,1,1,1,
					0,0,0,1,2,2,2,2,1,0,0,0,0,1,1,1,
					0,0,0,0,1,2,2,1,0,0,0,0,0,1,1,0,
					0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,
					0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
					];
				break;
				case CURSOR_SCALE_BIG:
					data = [
					5,16,16,0x000000,0xFFFFFF,
					0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
					0,0,1,1,2,2,2,2,1,1,0,0,0,0,0,0,
					0,1,2,2,2,2,2,2,2,2,1,0,0,0,0,0,
					0,1,2,2,2,1,1,2,2,2,1,0,0,0,0,0,
					1,2,2,2,2,1,1,2,2,2,2,1,0,0,0,0,
					1,2,2,1,1,1,1,1,1,2,2,1,0,0,0,0,
					1,2,2,1,1,1,1,1,1,2,2,1,0,0,0,0,
					1,2,2,2,2,1,1,2,2,2,2,1,0,0,0,0,
					0,1,2,2,2,1,1,2,2,2,1,0,0,0,0,0,
					0,1,2,2,2,2,2,2,2,2,1,0,0,0,0,0,
					0,0,1,1,2,2,2,2,1,1,1,1,0,0,0,0,
					0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,0,
					0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,
					0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,
					0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
					0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
					];
				break;
				case CURSOR_SCALE_SMALL:
					data = [
					5,16,16,0x000000,0xFFFFFF,
					0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,
					0,0,1,1,2,2,2,2,1,1,0,0,0,0,0,0,
					0,1,2,2,2,2,2,2,2,2,1,0,0,0,0,0,
					0,1,2,2,2,2,2,2,2,2,1,0,0,0,0,0,
					1,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,
					1,2,2,1,1,1,1,1,1,2,2,1,0,0,0,0,
					1,2,2,1,1,1,1,1,1,2,2,1,0,0,0,0,
					1,2,2,2,2,2,2,2,2,2,2,1,0,0,0,0,
					0,1,2,2,2,2,2,2,2,2,1,0,0,0,0,0,
					0,1,2,2,2,2,2,2,2,2,1,0,0,0,0,0,
					0,0,1,1,2,2,2,2,1,1,1,1,0,0,0,0,
					0,0,0,0,1,1,1,1,0,0,1,1,1,0,0,0,
					0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,
					0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,
					0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,
					0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
					];
				break;
				case CURSOR_HAND:
					data = [
					5,16,16,0x000000,0xFFFFFF,
					0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,
					0,0,0,1,1,0,1,2,2,1,1,1,0,0,0,0,
					0,0,1,2,2,1,1,2,2,1,2,2,1,0,0,0,
					0,0,1,2,2,1,1,2,2,1,2,2,1,0,1,0,
					0,0,0,1,2,2,1,2,2,1,2,2,1,1,2,1,
					0,0,0,1,2,2,1,2,2,1,2,2,1,2,2,1,
					0,1,1,0,1,2,2,2,2,2,2,2,1,2,2,1,
					1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,1,
					1,2,2,2,1,2,2,2,2,2,2,2,2,2,1,0,
					0,1,2,2,2,2,2,2,2,2,2,2,2,2,1,0,
					0,0,1,2,2,2,2,2,2,2,2,2,2,2,1,0,
					0,0,1,2,2,2,2,2,2,2,2,2,2,1,0,0,
					0,0,0,1,2,2,2,2,2,2,2,2,2,1,0,0,
					0,0,0,0,1,2,2,2,2,2,2,2,1,0,0,0,
					0,0,0,0,0,1,2,2,2,2,2,2,1,0,0,0,
					0,0,0,0,0,1,2,2,2,2,2,2,1,0,0,0
					];
				break;
				case CURSOR_HAND_DOWN:
					data = [
					5,13,11,0x000000,0xFFFFFF,
					0,0,1,1,0,1,1,0,1,1,0,0,0,
					0,1,2,2,1,2,2,1,2,2,1,1,0,
					0,1,2,2,2,2,2,2,2,2,1,2,1,
					0,0,1,2,2,2,2,2,2,2,2,2,1,
					0,1,1,2,2,2,2,2,2,2,2,2,1,
					1,2,2,2,2,2,2,2,2,2,2,2,1,
					1,2,2,2,2,2,2,2,2,2,2,1,0,
					0,1,2,2,2,2,2,2,2,2,2,1,0,
					0,0,1,2,2,2,2,2,2,2,1,0,0,
					0,0,0,1,2,2,2,2,2,2,1,0,0,
					0,0,0,1,2,2,2,2,2,2,1,0,0
					];
				break;
				case CURSOR_BOX_MOVE:
					data = [
					5,15,16,0x000000,0xFFFFFF,
					0,0,0,0,0,0,2,1,2,0,0,0,0,0,0,
					0,0,0,0,0,2,1,1,1,2,0,0,0,0,0,
					0,0,0,0,2,1,1,1,1,1,2,0,0,0,0,
					0,0,0,2,2,2,2,1,2,2,2,2,0,0,0,
					0,0,0,0,0,0,2,1,2,0,0,0,0,0,0,
					0,2,2,2,2,2,2,1,2,2,2,2,2,2,0,
					2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
					0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,
					0,2,2,2,2,2,2,2,2,2,2,2,2,2,0,
					2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
					0,2,2,2,2,2,2,1,2,2,2,2,2,2,0,
					0,0,0,0,0,0,2,1,2,0,0,0,0,0,0,
					0,0,0,2,2,2,2,1,2,2,2,2,0,0,0,
					0,0,0,0,2,1,1,1,1,1,2,0,0,0,0,
					0,0,0,0,0,2,1,1,1,2,0,0,0,0,0,
					0,0,0,0,0,0,2,1,2,0,0,0,0,0,0
					];
				break;
				case CURSOR_CONTROL_MOVE:
					data = [
					5,15,15,0x000000,0xFFFFFF,
					0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,
					0,0,0,0,0,0,2,1,2,0,0,0,0,0,0,
					0,0,0,0,0,2,1,1,1,2,0,0,0,0,0,
					0,0,0,0,2,1,1,1,1,1,2,0,0,0,0,
					0,0,0,2,2,2,2,1,2,2,2,2,0,0,0,
					0,0,2,1,2,2,2,1,2,2,2,1,2,0,0,
					0,2,1,1,2,2,2,1,2,2,2,1,1,2,0,
					2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
					0,2,1,1,2,2,2,1,2,2,2,1,1,2,0,
					0,0,2,1,2,2,2,1,2,2,2,1,2,0,0,
					0,0,0,2,2,2,2,1,2,2,2,2,0,0,0,
					0,0,0,0,2,1,1,1,1,1,2,0,0,0,0,
					0,0,0,0,0,2,1,1,1,2,0,0,0,0,0,
					0,0,0,0,0,0,2,1,2,0,0,0,0,0,0,
					0,0,0,0,0,0,0,2,0,0,0,0,0,0,0
					];
				break;
				case CURSOR_CONTROL_POSITIVE:
					data = [
					5,15,7,0x000000,0xFFFFFF,
					0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,
					0,0,2,1,2,0,0,0,0,0,2,1,2,0,0,
					0,2,1,1,2,2,2,2,2,2,2,1,1,2,0,
					2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
					0,2,1,1,2,2,2,2,2,2,2,1,1,2,0,
					0,0,2,1,2,0,0,0,0,0,2,1,2,0,0,
					0,0,0,2,0,0,0,0,0,0,0,2,0,0,0
					];
				break;
				case CURSOR_CONTROL_OBLIQUE:
					data = [
					5,13,13,0x000000,0xFFFFFF,
					2,2,2,2,2,2,2,0,0,0,0,0,0,
					2,1,1,1,1,1,2,0,0,0,0,0,0,
					2,1,1,1,1,2,0,0,0,0,0,0,0,
					2,1,1,1,2,0,0,0,0,0,0,0,0,
					2,1,1,2,1,2,0,0,0,0,0,0,0,
					2,1,2,0,2,1,2,0,0,0,0,0,0,
					2,2,0,0,0,2,1,2,0,0,0,2,2,
					0,0,0,0,0,0,2,1,2,0,2,1,2,
					0,0,0,0,0,0,0,2,1,2,1,1,2,
					0,0,0,0,0,0,0,0,2,1,1,1,2,
					0,0,0,0,0,0,0,2,1,1,1,1,2,
					0,0,0,0,0,0,2,1,1,1,1,1,2,
					0,0,0,0,0,0,2,2,2,2,2,2,2
					];
				break;
				case CLOSE:
				default:
					data = [
					4,8,7,0x0,
					1,1,0,0,0,0,1,1,
					0,1,1,0,0,1,1,0,
					0,0,1,1,1,1,0,0,
					0,0,0,1,1,0,0,0,
					0,0,1,1,1,1,0,0,
					0,1,1,0,0,1,1,0,
					1,1,0,0,0,0,1,1
					];
				break;
			}
			return drawIconByArray(data);
		}
		
		/**
		 * 通过数组绘制位图
		 * @param	datas
		 * @return
		 */
		public static function drawIconByArray(datas:Array):Bitmap
		{
			if (datas.length < 5)
			{
				throw new Error("数据长度无效!");
			}
			var id:uint = datas[0];
			if (id < 4)
			{
				throw new Error("元数据长度无效!");
			}
			var w:int = datas[1];
			var h:int = datas[2];
			if (w < 1 || h < 1)
			{
				throw new Error("图片宽度或高度无效!");
			}
			if (datas.length - id != w * h)
			{
				throw new Error("图片数据矩阵验证无效!");
			}
			var clr:Array = new Array();
			for (var i:uint = 3; i < id; i++)
			{
				clr.push(datas[i]);
			}
			try
			{
				var bmd:BitmapData = new BitmapData(w,h,true,0x0);
				for (var y:uint = 0; y < h; y++)
				{
					for (var x:uint = 0; x < w; x++)
					{
						if (datas[id] > 0)
						{
							bmd.setPixel32(x,y,(0xFF000000 | clr[datas[id]-1]));
						}
						id ++;
					}
				}
			}
			catch (error:Error)
			{
				throw new Error("图片生成失败!");
			}
			return new Bitmap(bmd);
		}


		/**
		 * 通过包含数据的字符串绘制位图
		 * @param	datas
		 * @return
		 */
		public static function drawIconByString(datas:String):Bitmap
		{
			var arr:Array = datas.split(",");
			arr.forEach(function(element:*, index:int, arr:Array):void
			{
				element = uint(element);
			}
			);
			return drawIconByArray(arr);
		}
	}//end of class
}
